<?php
namespace core;



class V
{
  // 根据role对变量进行key映射
  static function keyMap($role,$v){
    $result=[];
    $role=is_array($role)?$role:explode(',',trim($role,','));
    // 分解role
    $ki=[];
    $vi=[];
    foreach ($role as $key => $value) {
      $value=explode(":",$value);
      if (isset($value[1])){
        $ki[$value[0]]=$value[1];
        $vi[$value[1]]=$value[0];
      }
    }

    if (is_array($v)){
      foreach ($v as $key => $value) {
        if (isset($ki[$key])){
          $result[$ki[$key]]=$value;
        }elseif (isset($vi[$key])) {
          $result[$vi[$key]]=$value;
        }else{
          $result[$key]=$value;
        }
      }
    }else{
      $result=$v;
    }
    return $result;

  }
  // 强制类型转换，改变原变量
  static function toBool(&$val){
    if (isset($val)){//兼容空索引的情况
      $val=static::bool($val);
    }
  }
  static function toInt(&$val){
    if (isset($val)){//兼容空索引的情况
      $val=static::int($val);
    }
  }
  static function toFloat(&$val){
    if (isset($val)){//兼容空索引的情况
      $val=static::float($val);
    }
  }
  // 转换为bool类型
  static function bool(&$val, $return_null=false){
    if (isset($val)){//兼容空索引的情况
      if (empty($val)) return false;
      $boolval = ( is_string($val) ? filter_var($val, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) : (bool) $val );
      return ( $boolval===null && !$return_null ? false : $boolval );
    }else{
      return false;
    }
  }
  // 转换为int类型
  static function int(&$val){
    if (empty($val)) return 0;
    return (int)$val;
  }
  // 转换为float类型
  static function float(&$val){
    if (empty($val)) return 0.0;
    return (float)$val;
  }
  // 如果变量为空，设置默认值，改变原始变量
  static function setEmpty(&$key,$defaultValue=''){
		if (empty($key)) $key=$defaultValue;
		return $k;
	}
  // 如果变量没有设置，设置默认值，改变原始变量
	static function setIsset(&$key,$defaultValue=''){
		if (!isset($key)) $key=$defaultValue;
		return $key;
	}
  // 如果变量为空，设置默认值，不改变原始变量
  static function empty(&$key,$defaultValue=''){
		return ((isset($key))&&(!empty($key)))?$key:$defaultValue;
	}
  // 以列表形式获取变量
	static function get($parmstr,$global=false){
    $res=array();
		$str=is_array($parmstr)?$parmstr:explode(',',trim($parmstr,','));
		foreach ($str as $ks){
			$k=trim($ks);
      $v=self::getvar($k);
      $res[$k]=$v;
      if ($global){
        global ${$k};
  			${$k}=$v;
      }
		}
    return $res;
	}
  // 获取单个变量
  static function var($key,$defaultValue=''){
    $val=input($key);
		return empty($val)?$defaultValue:$val;
	}
  // 检查变量是否都有值
  static function isAllReady($v){
    $v=is_array($v)?$v:[$v];
    $result=true;
    foreach ($v as $key => $value) {
      if (empty($value)){
        $result=false;
        break;
      }
    }
		return $result;
	}
  // 兼容旧版本
  static function getvar($key,$defaultValue=''){
    return self::var($key,$defaultValue);
  }
  static function getp($parmstr){
    return self::get($parmstr);
  }

}
